<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
      function foo(){

      }

      console.log("将函数作为函数看待");
      console.log(judge(foo.prototype));//函数和他的实例对象的原型属性都指向的是一个空的object类型的对象
      console.log(judge(foo.prototype.__proto__));
      console.log(judge(foo.prototype.__proto__.__proto__));

      

      console.log("将函数作为对象看待");
      console.log(judge(foo.__proto__));//函数是Function函数的实例对象 所以函数的__proto__属性指向的是Function的prototype,它是一个function类型的对象
      /**所有的函数都是如果以对象的方式来看的话都是Function构造函数的实例(函数名.__proto__属性指向的是function类型的变量)*/
      /**所有的实例化对象的(除了函数对象)的__proto__属性指向的都是object类型的对象*/
      console.log(judge(foo.__proto__.__proto__));
   


      


    

      function judge(obj){
          //typeof对于数组 对象 和null返回都是object
         let type =typeof obj;
         if(type === "object"){
             if(obj instanceof Array){
                 return "Array";
             }

             if(obj === null){
                 return "null"
             }

             return "object";

         }
         
         //typeof可以判断的就直接返回
         return type;

      }
     
    </script>
</body>
</html>